Other shells

- dash
- zsh
Kali Linux System Shell

└─$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 Jan  5 05:20 /bin/sh -> dash

MacOS System Shell(Bourne Shell은 history 기능을 제공하지 않아 관련 파일이 없음)

~ » ls -al /bin/sh                                                                                        csian@Bonita-MacBookPro
-rwxr-xr-x  1 root  wheel  134000 Feb  9 18:39 /bin/sh
dash Shell
Unix 시스템의 원조 쉘 Borne 쉘의 속사판인 ash쉘은 상당히 많은 고급 기능이 빠져있다.
Debian 계열에서 제작한 자체 ash 쉘 버전이 dash이다.

NetBSD 버전의 ash 기능을 그대로 가져왔으며, 고급 커맨드인 편집 기능을 제공한다.

현재 대부분의 리눅스 배포판이 bash를 기본 쉘로 사용하면서, ash 쉘은 배포 파일을 설치하기 위한
설치 스크립트를 위해 빠른 실행이 필요한 쉘에서 사용된다.

예외로 우분투의 경우 기본 대화형 쉘로 bash 쉘을 사용하지만, 시스템 쉘 /bin/sh 쉘로 dash 쉘을 사용한다.

dash 쉘 변수는 bash 쉘과 달리 배열 기능을 제공하지 않는다.
dash 쉘을 위해서 만들어진 쉘 스크립트는 bash에서 제대로 동작하지 않을 수 있다.

dash 와 bash의 차이점
- 산술문 사용
expr: expr [expression]
대괄호: $[ expression ]
이중 괄호 사용: $(( expression ))

bash는 위의 세가지 산술 문을 사용한다. dash는 expr 명령 및 이중 괄호 방식을 제공하지만,
대괄호 방식은 지원하지 않는다.
- test 명령
bash는 스트링을 비교할 때, = 기호와 == 기호도 사용할 수 있다.
dash의 경우 = 기호만 사용한다.
- function 명령
function() 구문
함수의 이름만 사용

bash는 위의 두 가지 방법으로 함수를 정의할 수 있지만, dash에서는 function 함수이름으로 정의하는 방식을 지원하지 않는다.
dash에서는 함수이름() { } 식으로 함수를 정의해 주어야 한다.

zsh Shell
zsh는 오픈소스 유닉스 쉘로 본격적인 고급 쉘의 기능이 포함되어 있다.
- 개선된 쉘 옵션 처리
- 쉘 호환 모드
- 로드할 수 있는 모듈

일반적으로 내장 명령 세트는 쉘을 실행할 때 전체가 메모리에 로드되기 때문에 빠른 속도를 지원한다.
zsh은 쉘 내장 명령의 핵심 세트를 제공하고 더 많은 명령 모듈을 추가할 수 있도록 해준다.

zsh은 가장 넓은 사용자를 정의하기 때문에 그 만큼 많은 옵션 기능을 제공한다.
zsh 모듈 보기, 추가하기, 제거하기
zmodload
zmodload # ( )
zmodload zsh/<module_name> #
# ,
# <module_name> command
zmodload -u zsh/<module_name> #
zsh & 스크립트
- 수학 연
zsh는 Korn 쉘의 부동 소수점 연산을 완벽하게 지원한다.
- let 명령
- 이중 괄호
let value=" 4 * 5.1 / 3.2 "
echo $value
value1=$(( 4 * 5.1 ))
(( value2 = 4 * 5.1 ))
printf "%6.3\n" $value1,$value2
zsh/mathfunc 모듈을 설치하면 많은 수학 함수를 사용할 수 있다.
- 구조적 명령
zsh는 bash의 구조적 명령을 동일한 구문으로 사용하며, repeat 구조적 명령을 추가적으로 제공한다.
value=$(( 10 / 2 ))
repeat $value; do
echo "Hello!"
done
- 함수
function funcName {
commands
}
funcName() {
commands
}